묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티
loginProcessingUrl 절대경로 상대경로 차이점
3) Form Login 인증 강의처럼 코드 작성하였는데 로그인이 안되고 계속 /login 페이지로 이동해서 코드를 자세히 보니 경로 설정이 잘못되었더군요..loginProcessingUrl("/login_proc") 위 코드로 정상적으로 로그인이 되는데 경로를 슬래쉬를 붙이지 않고 'login_proc' 으로만 넣어주니까 로그인 먹통이었습니다.혹시 어떤 이유에서 그런지 문의드려도 될까요?아래처럼 태그를 보면 어차피 루트에서 이동하는건데 슬래쉬가 있고 없고의 차이점이 궁금하네요.감사합니다.<form class="form-signin" method="post" action="login_proc">
-
미해결스프링 시큐리티
기본 DaoAuthenticationProvider사용시 인증객체 조회 에러
프로젝트를 다시 만들어 실습을 진행중에 있습니다.이번 프로젝트에서는 CustomAuthenticationProvider를 생성하지 않고 기본으로 사용되는 DaoAuthenticationProvider를 사용할려고 CustomAuthenticationProvider를 등록하지 않았습니다.그런데@GetMapping("/denied") public String accessDenied(@RequestParam(value = "exception", required = false) String exception, Model model) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Account account = (Account)authentication.getPrincipal(); model.addAttribute("username", account.getUsername()); model.addAttribute("exception", exception); return "user/login/denied"; }이 컨트롤러에서 인증 객체 조회가 되지 않아 에러가 발생했습니다.기존 프로젝트의 CustomAuthenticationProvider에서의 인증 로직이 끝나고 UsernamePasswordAuthenticationToken타입으로 인증객체가 return되고 이것이 SecurityContext에 저장되는 흐름과현재 진행중 프로젝트의 DaoAuthenticationProvider에서 인증 로직이 끝나고UsernamePasswordAuthenticationToken타입으로 인증객체가 return되고 이것이 SecurityContext에 저장되는 흐름이 완전히 동일하다고 생각되어서기존 프로젝트와 똑같이 컨트롤러에서 인증객체가 조회될 것이라고 생각했는데 그렇지 않습니다.혹시 인증 흐름상에서 제가 놓치고 있는 부분이 있는건가요?
-
해결됨스프링 시큐리티
provider등록시에 우선권이 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.좋은 강의 감사합니다. 공부중에 궁금한게 있어서 글을 적습니다. CustomAuthenticationProvider는 현재 support로 UsernamePasswordToken인지 확인하고 있는데 DaoProvider의 경우에도 같은UsernamePasswordToken으로 검증하고 있던데 이런 경우 제가 등록한 provider가 더 우선권을 갖게 되어서 provider list를 순회 할때 custom provider가 더 먼저 지나가게 됨으로 daoprovider는 거치지 않는 것이 맞는건가요?또한 제가 등록한 custom provider는 parent로 daoprovider를 갖게 되는지도 궁금합니다.
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
23.Spring MVC02 버전 만들기(Ajax, jQuery)
SPringMVC01 폴더를 복사 후, SpringMVC02 폴더로 변경해서 강의 순서대로 실행을 했는데, Mapping 경로를 찾지 못하는 오류가 발생했습니다. 그래서 해결 방법으로 [appServlet] - [servlet-context.xml] 파일 안에 19번째 줄 기존의 파일 내용 일부분을 수정했습니다. 이렇게 해도 괜찮을까요 ? 다른 방법이 있으면 알고 싶어요 ㅠ[servlet-context.xml] - 수정 전 <resources mapping="/resources/**" location="/resources/" /> [servlet-context.xml] - 수정 <resources mapping="/assets/**" location="/resources/assets/" /> <resources mapping="/ad_assets/**" location="/resources/ad_assets/" /> a
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
Loading descript for 문제
안녕하세요! 나프에 이어 스프 강의까지 열심히 따라 가고 있는 학생입니다.강의 따라 열심히 실습하고 있는데요, API 설치 이후 위와 같은 팝업이 계속 뜨고 있습니다. 혼자 해결해보려고 구글 검색해봤지만, 뭐가 문제인지 모르겠습니다. ㅠ서버도 잘 작동되서 화면도 띄어지고 콘솔창에도 아무 문제가 나오지 않는데, 어떻게 해결하면 좋을까요?
-
해결됨스프링 시큐리티
csrf 토큰 시큐리티 6버전 변경사항
안녕하세요 강의 잘 보고있습니다. csrf 토큰 값을 헤더에 넣어서 실습하는 부분 따라해봤는데 잘 안되서 코드를 뜯어봤습니다.이번에 시큐리티 버전이 6으로 올라가면서 csrf 토큰을 인코딩해서 전달하고 이걸 디코딩하는 부분이 영상과 다른것같았습니다. 그래서 기본으로 제공하는 로그인 페이지에서 디버깅을 해보았는데 클라이언트에 전달한 csrf 토큰값이랑 실제 서버가 가지는 csrf 토큰값이 서로 달랐습니다. 이렇게되면 영상에서 보여주신 실습은 제대로 동작하지 않는게 맞나요?해당 사진은 CsrfFilter에서 actualToken을 받아오기 위한XorCsrfTokenRequestAttributeHandler 클래스 내부에 존재하는 resolveCsrfTokenValue 함수의 소스코드입니다.예제 따라하면 항상 마지막에 사이즈 비교하는 부분에서 걸렸습니다.
-
해결됨스프링 프레임워크는 내 손에 [스프2탄]
page의 값이 어디서 증가하는지 궁금합니다..
29강 - 리스트에 페이지 번호 구하기를 들으면서 이해가 안가는 부분이 있어 질의 드립니다.페이지 하단에 페이지번호 출력과 각 번호를 누르면 list?page=1, list?page=2 이런식으로 웹이 이동하는 방식 같은 전체적인 프로세스는 강의를 들으면서 이해가 잘되었습니다.한가지 이해가 안가는 부분이 있는데 제목에 작성한것처럼 page의 증가가 어디서 이루어지는지를 잘모르겠습니다.정상적으로 다 작동이 잘되고 디버깅을 이용해서 page가 1 - > 2 로 값이 정상적으로 들어가있는것도 확인하였습니다.코드를 전체적으로 검토를 해봤지만 page를 따로 증가시켜주는 코드는 찾지못했는데 어디서 증가가 되는건지가 궁금합니다 ㅠㅜㅠㅠ
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Exception에 대해서 질문드립니다.
실무를 하다 보면 다양한 Exception이 많이 나오게될텐데 그럴때마다 Exception파일을 만들어서 상속 받은 뒤 처리를 하시나요?? 그러면 엄청나게 많은 Exception파일들이 생길 것 같아서요!!아니면 공통적인 Exception들만 ExceptionHandler로 잡아서 에러처리하고 공통적이지 않은 Exception들은 어떤식으로 처리하는지 궁금합니다.저희 회사같은 경우는 Enum클래스에 여러가지 상황에맞는 상태코드와 문구를 설정해두고, 해당 상황이 나오면 상태코드와 문구를 Json데이터에 세팅하여 내려주더라구요. 반면에 ExceptionHandler는 사용하지 않고 있어요.호돌맨님은 어떤식으로 처리하는지 궁금하여 질문드립니다.
-
미해결스프링 시큐리티
순환 참조 오류 문의드립니다.
안녕하세요 강의 내용을 따라 코딩을 했는데 순환 참조 문제가 생겨 문의 드립니다.securityConfig와 AppConfig 설정에서SecurityResourceService를 생성하면서 생긴 문제인데요.깃허브에 강의 자료를 확인해보니 영상에서 설정한 로직과 securityConfig 로직이 많이 다르더라구요.임시로 application.properties에 spring.main.allow-circular-references=true 설정 하여 구동은 되지만 해결방법을 찾지 못하여 강사님께 도움을 요청 드립니다..
-
미해결스프링 시큐리티
username뿐만 아니라 password까지 검증되는 이유
현재 강의까지의 인증 로직을 보면@Service @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { private final UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Account account = userRepository.findByUsername(username); if (account == null) { throw new UsernameNotFoundException("UsernameNotFoundException"); } List<GrantedAuthority> roles = new ArrayList<>(); roles.add(new SimpleGrantedAuthority(account.getRole())); AccountContext accountContext = new AccountContext(account, roles); return accountContext; } }useranme으로만 Account객체를 조회해서 이것이 null인지 아닌지로 사용자를 인증하는 로직으로 이해했습니다.하지만 로그인 페이지에서 DB에 존재하는 username을 알맞게 입력하고 password는 틀리게 입력하면 인증단계에서 걸러지는걸 확인했습니다. 그렇다면 password까지 검증을 한다는 것인데..분명 인증로직으로만 봤을땐 username으로만 인증을 하는것 같았는데 password까지 검증될 수 있었던 이유가 무엇인가요.?
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요 유틸클래스 질문있습니다
보통 암호화하는 클래스들을 static 유틸클래스들로 만들었었는데 이런 static유틸클래스와 @Component를 달아서 사용하는 유틸클래스는 어떤 차이를 만들어낼수있는건가요..?제가 생각했을땐 유틸클래스를 스프링 빈으로 관리하겠다는 생각만 떠오르는데.. 이해할수있을만한 예시가있을까요..? 제가 못찾는건지 마땅히 그럴싸한 자료를 못봤던것같아서요 ㅠ강의도중 @Component얘기가 잠깐나와서 생각이나서 질문드려봅니다...
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
스프링부트 3.0.2 querydsl + rest docs + propoerties
스프링부트 3.0.2로 따라하고 계신분들을 위한 공유입니다.queryDSLimplementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"Spring REST Docsext { asciidocVersion = "3.0.0" }버전을 3.0.0으로 지정application.propertiesspring.h2.console.enabled=true spring.datasource.url=jdbc:h2:mem:test spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
스프 1, 2탄 전자정부프레임워크에서만 사용할 수 있나요?
프로젝트를 전자정부프레임워크에 사용하고 있던데 일단 전자정부프레임워크 바탕으로 공부하되 나중에 수업내용을 다른 곳에 적용할 수 있을까요?스프링 레거시 프로젝트는 이제 점점 안쓰이고 있는 추세인것 같은데 배워두면 도움이 될까요?취준생입니다.ㅜㅜ전자정부프레임워크만 사용하는 곳에 취직한다면 환경설정을 어렵게 할 필요없어서 상관이 없겠는데요.다른 이클립스, 인텔리제이를 쓰는 곳에 들어가면 꽤나 곤란할 것 같아서요.특히 인텔리제이로 예제를 실행하면 자꾸 오류가 나서요.원래 전자정부프레임워크르 바탕으로 만들어진 예제같아서 잘 안되는 것 같은데요수업자료는 정말 정말 괜찮은데 프로젝트를 전자정부프레임워크에서만 쉽게 실행이 가능하면 환경설정에 약한 처음 공부하는 입장에서 꽤나 곤란할것 같아서요 ㅠㅠ인텔리제이는 잘 몰라도 이클립스 가지고 프로젝트를 구축하는 방법도 나중에 설명해주셨으면 합니다
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
영상에 나오는 브금 출처좀 알 수 있을까요?
노동요로 좋네요ㅇㅅㅇ
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Interceptor 여러번 호출
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()); } }@Slf4j public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info(" >> preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info(" >> postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info(" >> afterCompletion"); } } 호출이 여러번 되는 현상이 발생합니다. preHandle 로그가 3번 찍혀요.검색하여 기본 + 2번 더 호출된다는 글을 보았으나, 제게는 해결책이 아니었습니다.(https://okky.kr/articles/598386)2번 더 호출 될 때에는 request.getParameter null로 넘어옵니다. (acceessToken까지 진행해보다가 롤백했어요 ... 이거부터 해결이 되어야해서 ㅠ.ㅠ)도와주세요 호돌맨님! (git 주소 가렸어요 ! :D)
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
질문이있어요
int result=memberMapper.register(m);이부분은 xml을보면 단순한 쿼리 인서트문장인데 result에 1과 0은 어디서 지정해준건가요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
QueryDsl 추가 과정에서 질문이 있습니다..
안녕하세요 선생님. Querydsl 설정하는 부분에서 질문이 있습니다.호돌맨님 강의영상처럼 똑같이 보고 따라했는데 제꺼에선 Q클래스를 인식하지를 못 하더라구요.제가 기존에 영한님 강의에 익숙해져서 빌드 도구를 gradle이 아니라 인텔리제이로 해놨었거든요.그래서 혹시 몰라 gradle로 바꾸니 이제 QClass가 잘 생성이 되네요.혹시 이 부분은 어느 키워드로 검색을 해야할까요..?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
PostCreate 기본 생성자 문제 질문드립니다.
우선 수업 잘 듣고 있습니다 호돌맨님! 많이 배우고 있어요 ㅎㅎ제목에서와 같이 PostCreate 부분에서 기본 생성자에 관해 질문을 드립니다. // @Setter @Getter @NoArgsConstructor // TODO: 왜 이게 꼭 있어야 하는 것일까? public class PostCreateDto { @NotBlank(message = "타이틀을 입력해주세요.") private String title; @NotBlank(message = "내용을 입력해주세요.") private String content; @Builder public PostCreateDto(String title, String content) { this.title = title; this.content = content; } }우선 이건 제 코드입니다. 보시면 제 코드에는 @NoArgsConstructor 어노테이션이 있는데요. 이 부분이 없으면 제 PostControllerTest에서는 테스트 실패가 뜨더라구요. 에러 메시지는 다음과 같습니다. Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.blog.request.PostCreateDto (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)에러메시지를 읽어보니 생성자가 없다는 문제 같아서 @NoArgsConstructor 어노테이션을 붙여보니 정상적으로 작동을 하더군요.이 부분이 궁금해서 찾아보니 RequestBody로 넘어오는 데이터를 맵핑할 때 Jackson의 ObjectMapper가 사용되는데 이게 RequestBody를 생성할 때, DTO가 Property기반이 아니거나 Delegate를 한 상태가 아니라면 기본 생성자로 생성한다 라고 나와있네요. (https://velog.io/@conatuseus/RequestBody%EC%97%90-%EC%99%9C-%EA%B8%B0%EB%B3%B8-%EC%83%9D%EC%84%B1%EC%9E%90%EB%8A%94-%ED%95%84%EC%9A%94%ED%95%98%EA%B3%A0-Setter%EB%8A%94-%ED%95%84%EC%9A%94-%EC%97%86%EC%9D%84%EA%B9%8C-3-idnrafiw)그리고 바인딩할 때 Setter가 없이도 자바 리플렉션을 통해서 DTO에 값이 들어간다고 하는 것도 이번에 알게 됐네요. 그래서 Setter를 지우고 Getter랑 @NoArgsConstructor 어노테이션만 붙이고 테스트를 돌려보니 통과가 잘 됩니다. 그런데 호돌맨님이 올려주신 코드를 보니 PostCreate 부분에 기본생성자가 없더라구요. 그런데도 테스트통과가 잘 되는 것을 보니까 신기하네요. 어떻게 그게 가능한 것인지 설명해주실 수 있나요?
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
mysql콘솔에서 오류가 발생하네요
mysql 콘솔을 실행하려고하면 사진과 같은 오류가 발생하네요 구글링에 있는거의다해봤는데도 안되어서 글남겨요
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
키보드 소리가 너무좋은데..
강의외적 질문이지만.. 혹시 어떤 키보드를 쓰고계신지 알수있을까요..? 소리가 너무 좋아서 악기같아요